以下內容同步更新於
https://kevinyay945.com/smart-home-tutorial/027/
在這個之前的程式,都是先到資料庫那邊下語法建好表,然後再到程式這邊新增需要的屬性,但這個會有個問題是,如果有一天你需要到新的環境將你的程式部署起來,或是你需要兩個月前的資料庫型態,這時候就會發生你不知道之前執行了什麼樣的sql語法,不曉得兩個月前的資料庫長得怎麼樣(在你資料庫沒有定期備份的情況下)
因此,需要有個機制可以將資料庫的狀態也那納入git的版本控制
在這邊,我使用到的是
https://github.com/golang-migrate/migrate
來幫我們進行資料庫的版本控制
沒有選擇使用gorm的migrate而是直接使用語法的原因主要是因為資料庫如果需要用一些gorm沒有寫到的extension,還是得把這些extension放到程式中,所以才會直接選擇使用語法來進行資料庫的表的版本控制
而這個migrate的工具的使用方式還蠻簡單的
https://github.com/golang-migrate/migrate/blob/master/MIGRATIONS.md
在你需要的地方放上他指定規則的sql檔案
{version}_{title}.up.{extension}
{version}_{title}.down.{extension}
他的version要持續變多,第一個是1,第二個就是2,當然你也可以直接跳10,只要數字變多就可以了
接著,關於up/down的部分,因為在這種版本控制呢,會出現說你今天把原本的程式升級到v2.0.0版,卻發生了很大的bug,需要退回到v1.9.7版,那你的資料庫也會需要將資料變成v1.9.7的形狀,所以up跟down基本上是要相輔相成的,如果up有創表(create table...),那down就要刪表(drop table ...)
他的教學也寫得蠻詳盡的,如果有需要可以點進他的github閱讀他的readme喔
而下面是這次的寫的過成和程式碼
https://www.youtube.com/watch?v=98v_rdLQdYs
https://github.com/kevinyay945/smart-home-backend/tree/v0.6.0